import 'dart:html';

main(List<String> args) {
 final s = Shape(); 
}

// 使用 abstract 进行抽象类修饰
// 抽象类类似于协议.  可以没有方法实现
// 抽象类不能实例化.
/**
 * 抽象类 可通过子类实例化, 使用工厂构造函数进行子类实例化. 
 */
// external 将方法声明和 方法实现进行分离
// @patch注解 进行方法实现 
// 注解: 针对不同平台进行不同实现
abstract class Shape{
  // 相当于 必须实现
  int getArea();
  // 相当于 可选实现
  String getInfo(){
    return "形状";
  }
  factory Shape(){
    return Rectangle();
  }
}

class Rectangle extends Shape{
  // 继承抽象类后, 必须实现未实现的方法
  @override
  int getArea() {
    // TODO: implement getArea
    return 100;
  }
  @override
  String getInfo() {
    // TODO: implement getInfo
    return super.getInfo();
  }
  Rectangle():
}